package io;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Scanner;

/**
 * date: 2023-2-22
 * 扫描指定目录，并找到名称中包含指定字符的所有普通文件（不包含目录），并且后续询问用户是否要删除该文件
 */
public class test1 {
    public static void main(String[] args) throws IOException {
        // 让用户输入一个指定搜索的目录
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入要扫描的根目录（绝对路径OR相对路径）：");
        String rootDirPath = scanner.next();

        // 针对用户输入进行简单地判定
        File rootDir = new File(rootDirPath);
        if(!rootDir.isDirectory()) {
            System.out.println("您输入的根目录不存在或者不是目录，退出");
            return;
        }

        // 让用户输入一个要删除的文件名
        System.out.println("请输入要找出的文件名中的字符：");
        // 此处要使用 next 而不要使用 nextLine
        String token = scanner.next();

        /*
            针对指定的路径进行扫描，递归操作！
            先从根目录出发 （rootDirPath），先判定一下当前这个目录里边是否包括咱们要删除的文件，如果有就删除，否则就跳过下一个
            如果当前这里包含了一些目录，再针对子目录进行递归
         */
        List<File> result = new ArrayList<>();
        //因为文件系统是树形结构，所以我们使用深度优先遍历（递归）完成遍历
        scanDir(rootDir,token,result);
        System.out.println("共找到了符合条件的文件 " + result.size() + " 个，它们分别是：");
        for (File file : result) {
            System.out.println(file.getCanonicalPath() + " 请问您是否要删除文件？y/n");
            String in = scanner.next();
            if(in.toLowerCase().equals("y")) {
                file.delete();
            }
        }
    }

    private static void scanDir(File rootDir, String token, List<File> result) {
        // 1. 先列出 rootDir 下的文件和目录
        File[] files = rootDir.listFiles(); // 相当于查看一下这个目录都有啥，使用 files 数组表示出来
        if(files == null || files.length == 0) {
            // 当前 rootDir 目录下没东西，是一个空目录，结束 继续递归
            return;
        }
        // 2. 遍历当前的列出结果
        for (File file : files) {
            if(file.isDirectory()) { // 如果是目录就进行进一步递归
                scanDir(file,token,result);
            } else {
                if(file.getName().contains(token)) { //
                    result.add(file.getAbsoluteFile());
                }
            }
        }
    }
}
